#pragma once
#include <algorithm>
#include <cmath>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <map>
#include <memory>
#include <mutex>
#include <queue>
#include <set>
#include <unordered_map>

// Eigen
#include "eigen3/Eigen/Core"
#include "eigen3/Eigen/Dense"
#include "eigen3/Eigen/Geometry"
#include "eigen3/Eigen/SVD"
#include "eigen3/Eigen/StdVector"

// Sophus
#include "sophus/se3.hpp"
#include "sophus/so3.hpp"

// opencv
#include "opencv2/core/eigen.hpp"
#include "opencv2/opencv.hpp"

// fast
#include "fast/fast.h"

// glog
#include "glog/logging.h"

// boost
#include "boost/algorithm/string.hpp"
#include "boost/bind.hpp"
#include "boost/filesystem.hpp"
#include "boost/function.hpp"
#include "boost/noncopyable.hpp"
#include "boost/thread.hpp"

// tools
#include "vio/tools/math_utils.h"

namespace vio {

// logs: https://github.com/shiena/ansicolor
const char STAR[] = "***********************************************";
const char LOG_GREEN_BEGIN[] = "\x1b[92m";
const char LOG_RED_BEGIN[] = "\x1b[31m";
const char LOG_CYAN_BEGIN[] = "\x1b[36m";
const char LOG_COLOR_END[] = "\033[0m";

}  // namespace vio
